﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Timers;
using System.Data.SqlClient;

namespace WindowsFormsApplication3
{
	public partial class Prestamo: Form
	{
        DataSet dsPrestamos = new DataSet();
        string rutaBDBiblioteca = "Data Source=JOHANA-PC;Initial Catalog=Biblioteca;Integrated Security=True";
        CheckBox ChbEstado = new CheckBox();
        BindingManagerBase bmPrestamo;

		public Prestamo()
		{
			InitializeComponent();
		}

        private void Prestamo_Load(object sender, EventArgs e)
        {
            SetearControl();
            SqlConnection cnBiblioteca;
            AccDatBiblioteca datos = new AccDatBiblioteca();

            cnBiblioteca = datos.ObtenerConexion(rutaBDBiblioteca);
            SqlDataAdapter adp = datos.ObtenerAdaptador("Select * from Prestamos", cnBiblioteca);

            adp.Fill(dsPrestamos, "Prestamos");
            cnBiblioteca.Close();

            Grilla_Prest.DataSource = dsPrestamos.Tables["Prestamos"];
            Grilla_Prest.Refresh();
            TitulosColumnas();

            bmPrestamo = BindingContext[dsPrestamos, "Prestamos"];
            AsociarTextos();
            MostrarPosicion();
        }

        private void TitulosColumnas()
        {
            Grilla_Prest.Columns["Cod_Prest"].HeaderText = "CODIGO PRESTAMO";
            Grilla_Prest.Columns["Cod_lib"].HeaderText = "CODIGO LIBRO";
            Grilla_Prest.Columns["Fec_Prest"].HeaderText = "FECHA PRESTAMO";
            Grilla_Prest.Columns["Fec_Dev"].HeaderText = "FECHA DEVOLUCION";
            Grilla_Prest.Columns["Nom_Ape"].HeaderText = "NOMBRE APELLIDO";
            Grilla_Prest.Columns["E_mail"].HeaderText = "E_MAIL";
            Grilla_Prest.Columns["Est_Prest"].HeaderText = "ESTADO";
        }

        private void MostrarPosicion()
        {
            int iTotal = bmPrestamo.Count;
            int iPos;

            if (iTotal == 0)
                LblPosicion.Text = "No Registros";
            else
            {
                iPos = bmPrestamo.Position + 1;
                LblPosicion.Text = iPos.ToString() + " de " + iTotal.ToString();
            }
        }

        private void AsociarTextos()
        {
            TxtCod_Prest.DataBindings.Add(new Binding("Text", dsPrestamos, "Prestamos." + dsPrestamos.Tables["Prestamos"].Columns[0].ColumnName.ToString()));
            TxtCod_Lib.DataBindings.Add(new Binding("Text", dsPrestamos, "Prestamos." + dsPrestamos.Tables["Prestamos"].Columns[1].ColumnName.ToString()));
            DtpFec_Prest.DataBindings.Add(new Binding("Text", dsPrestamos, "Prestamos." + dsPrestamos.Tables["Prestamos"].Columns[2].ColumnName.ToString()));
            DtpFec_Dev.DataBindings.Add(new Binding("Text", dsPrestamos, "Prestamos." + dsPrestamos.Tables["Prestamos"].Columns[3].ColumnName.ToString()));
            TxtNom_Ape.DataBindings.Add(new Binding("Text", dsPrestamos, "Prestamos." + dsPrestamos.Tables["Prestamos"].Columns[4].ColumnName.ToString()));
            TxtE_mail.DataBindings.Add(new Binding("Text", dsPrestamos, "Prestamos." + dsPrestamos.Tables["Prestamos"].Columns[5].ColumnName.ToString()));
            ChbEstado.DataBindings.Add(new Binding("Checked", dsPrestamos, "Prestamos." + dsPrestamos.Tables["Prestamos"].Columns[6].ColumnName.ToString()));
           }


        private void ReemplazarControl(Control controlAnterior, Control controlNuevo)
        {
            Point ubicacion;
            Size tamanio;
            ubicacion = controlAnterior.Location;
            tamanio = controlAnterior.Size;
            controlNuevo.Location = ubicacion;
            controlNuevo.Size = tamanio;
            HabilitarControl(controlNuevo, true);
            HabilitarControl(controlAnterior, false);
        }

        private void HabilitarControl(Control ctl, bool estado)
        {
            ctl.Enabled = estado;
            ctl.Visible = estado;
        }


        private void SetearControl()
        {
            ReemplazarControl(TxtEst_Prest, ChbEstado);
            this.Controls.Add(ChbEstado);
            HabilitarControl(TxtEst_Prest, false);
        }

        private void BtnPrimero_Click(object sender, EventArgs e)
        {

            bmPrestamo.Position = 0;
            MostrarPosicion();
        }

        private void BtnAnterior_Click(object sender, EventArgs e)
        {
            bmPrestamo.Position -= 1;
            MostrarPosicion();
        }

        private void BtnSiguiente_Click(object sender, EventArgs e)
        {
            bmPrestamo.Position += 1;
            MostrarPosicion();
        }

        private void BtnUltimo_Click(object sender, EventArgs e)
        {
            bmPrestamo.Position = bmPrestamo.Count - 1;
            MostrarPosicion();
        }


        private void BtnAñadir_Click(object sender, EventArgs e)
        {
            DataTable Prestamos = dsPrestamos.Tables["Prestamos"];
            DataRowCollection cfilas = Prestamos.Rows;
            DataRow nuevaFila;
            int iTotal = bmPrestamo.Count;
            try
            {
                nuevaFila = Prestamos.NewRow();
                // Datos por omisión para las columnas de la nueva fila
                nuevaFila[0] = iTotal + 1;
                nuevaFila[1] = "Cod_Lib";
                nuevaFila[2] = DateTime.Now;
                nuevaFila[3] = DateTime.Now;
                nuevaFila[4] = "Nombre Apellido";
                nuevaFila[5] = "E_Mail";
                nuevaFila[6] = true;
                cfilas.Add(nuevaFila);
                BtnUltimo.PerformClick();
                MostrarPosicion();
                LblResultado.Text = "";
                TxtCod_Prest.Enabled = true;
                TxtCod_Prest.Focus();
            }
            catch (ConstraintException ex)
            {
                MessageBox.Show(ex.Message);
            }
        }


        private void LimpiarCajas()
        {
            DataTable Prestamos = dsPrestamos.Tables["Prestamos"];
            DataRowCollection cfilas = Prestamos.Rows;
            DataRow nuevaFila;
            int iTotal = bmPrestamo.Count;
            nuevaFila = Prestamos.NewRow();
            // Datos por omisión para las columnas de la nueva fila
            nuevaFila[0] = iTotal + 1;
            nuevaFila[1] = "Cod_Lib";
            nuevaFila[2] = DateTime.Now;
            nuevaFila[3] = DateTime.Now;
            nuevaFila[4] = "Nombre Apellido";
            nuevaFila[5] = "E_Mail";
            nuevaFila[6] = true;
            cfilas.Add(nuevaFila);
            BtnUltimo.PerformClick();
            MostrarPosicion();
            LblResultado.Text = "";
            TxtCod_Prest.Enabled = true;
            TxtCod_Prest.Focus();
        }
        
        private void BtnGuardar_Click(object sender, EventArgs e)
        {
           
            GestPrestamo GPrestamo = new GestPrestamo();
            if (GPrestamo.LibroPrestado(TxtCod_Lib.Text, rutaBDBiblioteca))
                LblResultado.Text = " El Libro esta Prestado";
            else
            {
                CPrestamo NuevoPrestamo =
                     new CPrestamo(int.Parse(TxtCod_Prest.Text), TxtCod_Lib.Text, DtpFec_Prest.Text, DtpFec_Dev.Text, TxtNom_Ape.Text, TxtE_mail.Text, ChbEstado.Checked);
                if (!GPrestamo.GrabarPrestamo(NuevoPrestamo, rutaBDBiblioteca))
                    LblResultado.Text = "Error en el registro del Prestamo";
                else
                    LblResultado.Text = "Prestamo Guardado";
            }
        }

        private void BtnBorrar_Click(object sender, EventArgs e)
        {
            GestPrestamo GPrestamo = new GestPrestamo();
            CPrestamo EliminarPrestamo =
                     new CPrestamo(int.Parse(TxtCod_Prest.Text), TxtCod_Lib.Text, DtpFec_Prest.Text, DtpFec_Dev.Text, TxtNom_Ape.Text, TxtE_mail.Text, ChbEstado.Checked = false);
            if (GPrestamo.EliminarPrestamo(EliminarPrestamo, rutaBDBiblioteca))
            {
                LblResultado.Text = "Prestamo Eliminado";
                bmPrestamo.Position -= 1; //muestra el registro anterior
                MostrarPosicion();
            }
            else
                LblResultado.Text = "Prestamo no Eliminado";
        }


        private void BtnModificar_Click(object sender, EventArgs e)
        {
            GestPrestamo GPrestamo = new GestPrestamo();
            CPrestamo ModificarPrestamo =
                      new CPrestamo(int.Parse(TxtCod_Prest.Text), TxtCod_Lib.Text, DtpFec_Prest.Text, DtpFec_Dev.Text, TxtNom_Ape.Text, TxtE_mail.Text, ChbEstado.Checked);
            
            if (GPrestamo.ModificarPrestamo(ModificarPrestamo, rutaBDBiblioteca))
            {
                LblResultado.Text = "Prestamo Modificado";
            }
            else
                LblResultado.Text = "Prestamo no Modificado";
        }

        private void BtnActualizar_Click(object sender, EventArgs e)
        {
            dsPrestamos.Tables.Clear();
            SqlConnection cnBiblioteca;

            AccDatBiblioteca AccDatBiblioteca = new AccDatBiblioteca();

            cnBiblioteca = AccDatBiblioteca.ObtenerConexion(rutaBDBiblioteca);
            SqlDataAdapter adp = AccDatBiblioteca.ObtenerAdaptador("Select * From Prestamos", cnBiblioteca);

            adp.Fill(dsPrestamos, "Prestamos");
            cnBiblioteca.Close();
            Grilla_Prest.DataSource = dsPrestamos.Tables["Prestamos"];
            bmPrestamo = BindingContext[dsPrestamos, "Prestamos"];
            bmPrestamo.Position = bmPrestamo.Count - 1;
            MostrarPosicion();
            LblResultado.Text = "";
            TxtCod_Prest.Focus();
        }

       
        private void TxtCod_Prest_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar))
                e.Handled = false;
              else
                    e.Handled = true;
        }

        private void TxtCod_Lib_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar))
                e.Handled = false;
            else
                if (Char.IsControl(e.KeyChar))
                    e.Handled = false;
                else
                    e.Handled = true;
        }

        private void TxtNom_Ape_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsLetter(e.KeyChar))
                e.Handled = false;
            else
                if (Char.IsSeparator(e.KeyChar))
                    e.Handled = false;
                else
                    if (Char.IsControl(e.KeyChar))
                        e.Handled = false;
                    else
                        e.Handled = true;
        }

        private void TxtE_mail_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsLetterOrDigit(e.KeyChar))
                e.Handled = false;
            //else
            //    if (Char.IsDigit(e.KeyChar))
            //        e.Handled = false;
                else
                    if (Char.IsSeparator(e.KeyChar))
                        e.Handled = false;
                    else
                        if (Char.IsSymbol(e.KeyChar))
                            e.Handled = false;
                        else
                           if (Char.IsPunctuation(e.KeyChar))
                                e.Handled = false;
                           else
                              if (Char.IsControl(e.KeyChar))
                                    e.Handled = false;
                                else
                                    e.Handled = true;
        }

        private void TxtNom_Ape_Validating(object sender, CancelEventArgs e)
        {
            if (TxtNom_Ape.Text.Length == 0)
            {
                e.Cancel = true;
                errorProvider1.SetError(TxtNom_Ape, "Ingrese Nombre y Apellido");
            }
            else
                errorProvider1.SetError(TxtNom_Ape, null);
        }

        private void TxtE_mail_Validating(object sender, CancelEventArgs e)
        {
            if (TxtE_mail.Text.Length == 0)
            {
                e.Cancel = true;
                errorProvider1.SetError(TxtE_mail, "Ingrese una dirección de E_Mail");
            }
            else
                errorProvider1.SetError(TxtE_mail, null);
        }
        

        private void BtnSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }
	}
}
